/**
 * 字典树 类
 * 可以理解为 26 叉树，即每个节点下，都有 26 个子节点
 */
public class TrieNode {
    // 节点对象，用数组存储
    private TrieNode[] childs;
    private int size = 26;
    // 当前节点是否是一个字符串的结束字符
    private boolean isEnd = false;
    // 从根节点，到当前节点上的路径能够组成的单词
    private String word = null;
    // 节点下，有多少个非空节点
    private int count = 0;

    public TrieNode() {
        // 初始化 26 个子节点
        childs = new TrieNode[size];
    }

    public boolean containsKey(char c) {
        // 字符是否存在在子节点中
        return childs[c - 'a'] != null;
    }

    public void put(char c, TrieNode node) {
        // 为子节点赋值
        childs[c - 'a'] = node;
    }

    public TrieNode get(char c) {
        // 获取子节点的值
        return childs[c - 'a'];
    }

    public void setEnd() {
        // 设置子节点，是一个字符串的结束节点
        this.isEnd = true;
    }

    public boolean isEnd() {
        // 获取是否结束节点
        return this.isEnd;
    }

    public void setWord(String word) {
        this.word = word;
    }

    public String getWord() {
        return this.word;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public int getCount() {
        return this.count;
    }

    public int getSize() {
        return this.size;
    }

    public TrieNode[] getChilds() {
        return this.childs;
    }
}
